import itertools
import time
'''
 无限迭代：
'''
# count(start = 0,step=1)
# c = itertools.count(1)
# for i in c:
#     print(i)
#     time.sleep(1)

# cycle(iterable)
# 把传入的一个序列无限重复下去
# cy = itertools.cycle("lifeibiao")
# for i in cy:
#     print(i)
#     time.sleep(1)

# repeat(object[, times])
# 把一个元素无限重复下去,如果提供了第二个参数，就可以指定重复次数
# r = itertools.repeat("lifeibiao", 3)
# for i in r:
#     print(i)
#     time.sleep(1)

'''
有限迭代：
'''
# 把一组迭代对象串联起来，形成一个更大的迭代器
# chain(*iterables)
# cha = itertools.chain("ABC", "abc")
# for i in cha:
#     print(i)
#     time.sleep(1)

# 把迭代器中相邻的重复元素挑出来放在一起
# g = itertools.groupby("AAABBBBccddeeFFF")
# for key, value in g:
#     print(key, list(value))
#     time.sleep(1)


'''
排列组合：
'''
# 全排列
# 从n个不同的元素中取出m<n个元素，按照一定的顺序排成一列，叫做从n个元素中获取m
# 个元素的一个排列，当m=n时，这个排列称为全排列
# itertools.permutations(iterable, length)
# p = list(itertools.permutations([1, 2, 3, 4], 2))
# print(p)
# print(len(p))
'''
从n中选m个，  n!/(m-n)!
'''

# 组合
# 从n个不同的元素中任意m(m<n)个元素为一组，叫做从n个不同元素中取出m个元素的组合
# itertools.combinations(iterable, length)
# c = list(itertools.combinations([1, 2, 3, 4], 3))
# print(c)
# print(len(c))
'''
n!/m!(n-m)!
'''


# 排列组合（笛卡尔积）
# itertools.product(*iterable,repeat=1)

# passwds = list(["".join(x) for x in itertools.product("0123456789", repeat=4)])
# print(passwds)
# print(len(passwds))
